
import cache from '@/utils/cache.js'

const request = {
	ajax(url,data,method="get",header={}){
		// 定义请求对象
		var that = this; 
		// 动画处理
		uni.showLoading({title: "执行中"})
		
		// 做一个拦截，目的是给未来的地址，参数和请求头设置额外的参数
		const config = {url,data,header};
		that.requestInterceptor(config);
		
		const targetUrl = config.url;
		const targetData = config.data;
		const targetHeader = config.header;
		
		return new Promise((resolve,reject)=>{
			// 发起请求
			uni.request({
				url:targetUrl,
				method,
				data:targetData,
				header:targetHeader,
				success(res){//成功触发
					// 做一个响应拦截
					const responseData = that.responseInterceptor(res,null);
					if(responseData)resolve(responseData);
				},
				fail(err){ // 失败触发
					const responseErr = that.responseInterceptor(null,err);
					uni.showToast({icon: "none",title: "服务器异常"})
					if(responseErr)reject(responseErr);
				},
				complete() { // 这里不论成功和失败都会触发的逻辑
					// 关闭执行动画
					uni.hideLoading()
				}
			})
		})
	},
	
	// post
	post(url,data,header={}){
		return this.ajax(url,data,"post",header)
	},
	
	// get
	get(url,data,header={}){
		return this.ajax(url,data,"get",header)
	},
	
	// 文件上传
	upload(url,path,data={},header={},name="file"){
		// 定义请求对象
		var that = this; 
		// 动画处理
		uni.showLoading({title: "加载中"})
		// 做一个拦截，目的是给未来的地址，参数和请求头设置额外的参数
		const config = {url,data,header};
		that.requestInterceptor(config);
		const targetUrl = config.url;
		const targetData = config.data;
		const targetHeader = config.header;
		return new Promise((resolve,reject)=>{
			uni.uploadFile({
				url: targetUrl,
				filePath: path,
				formData:targetData,
				name: name,
				header: targetHeader,
				success(resp) {
					// 做一个响应拦截
					const responseData = that.responseInterceptor(resp,null);
					if(responseData)resolve(responseData);
				},
				fail(err){
					uni.showToast({
						icon: "none",
						title: "上传失败"
					})
					// 做一个响应拦截
					const responseData = that.responseInterceptor(null,err);
					if(responseData)reject(responseData)
				},
				complete() {
					// 这里不论成功和失败都会触发的逻辑
					// 关闭执行动画
					uni.hideLoading()
				}
			})
		});
		
	}
};


// 请求逻辑的改造
request.requestInterceptor = function(config){
	// 开始进行接口调用
	let baseUrl = "http://10.11.34.130:9900/api"
	// 改写请求地址
	config.url  = baseUrl + config.url;
	// 给请求头设置token参数
	config.header.token = "Bearer "+cache.get("token");
}

// 请求逻辑的改造
request.responseInterceptor = function(res,err){
	console.log("【request】-----服务器返回的数据信息是: ", res)
	// 成功处理
	if(res){
		if(typeof res.data == 'string'){
			res.data = JSON.parse(res.data);
		}
		
		if(res.statusCode == 200 && res.data.code == 200){
			return res.data;
		}
		
		if(res.data.code == 401){
			uni.showToast({
			    icon: "none",
			    title: res.data.msg,
				success(){
					setTimeout(()=>{
						// 重定向到登录去登录
						uni.redirectTo({url:"/login/login"})
					},300)
				}
			})
		}
		 
		if(res.data.code == 500){
			uni.showToast({
			    icon: "none",
			    title: "未知异常，请联系管理员"
			})
		}
		
		console.log("服务器返回错误的信息",res)
		if(res.data.code == 501){
			uni.showToast({
			    icon: "none",
			    title: res.data.msg
			})
		}
		// sentinel限流错误
		if(res.data.code == 429){
			uni.showToast({
			    icon: "none",
			    title: "客官慢一点，服务器忙！"
			})
		}
	}
	
	//失败处理
	if(err){
		return err;
	}
}

export default request;
